home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / ungepackte_daten / 1992 / 09 / 2 / window-machine / wm_source.ampk / WM_Request.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-06-01  |  7.0 KB  |  383 lines

  1. #include <WM.h>
  2. #include <MyStructs.h>
  3. #include <Window.h>
  4. #include <Requester.h>
  5.  
  6. extern SHORT gleft,gtop,gwidth,gheight;
  7. extern UBYTE GNAMEBuff[];
  8.  
  9. USHORT NewReqDef()
  10. {
  11.     USHORT quit=1;
  12.     ScreenToFront(WMsc);
  13.     back=areq->BackFill;
  14.     sprintf(BACKBuff,"%d",back);
  15.     Wleft=awin->LeftEdge;
  16.     sprintf(LEFTBuff,"%d",Wleft);
  17.     Wblock=awin->BlockPen;
  18.     sprintf(BLOCKBuff,"%d",Wblock);
  19.     Wdetail=awin->DetailPen;
  20.     sprintf(DETAILBuff,"%d",Wdetail);
  21.     Wtop=awin->TopEdge;
  22.     sprintf(TOPBuff,"%d",Wtop);
  23.     Wwidth=awin->Width;
  24.     sprintf(WIDTHBuff,"%d",Wwidth);
  25.     Wheight=awin->Height;
  26.     sprintf(HEIGHTBuff,"%d",Wheight);
  27.     Wminheight=areq->RelLeft;    /* RelLeft */
  28.     sprintf(MINHBuff,"%d",(SHORT)Wminheight);
  29.     Wmaxheight=areq->RelTop;    /* RelTop */
  30.     sprintf(MAXHBuff,"%d",(SHORT)Wmaxheight);
  31.     TITLEInfo.DispPos=0;
  32.     strcpy(TITLEBuff,awin->Title); /* ReqName */
  33.     Wflags=areq->PFlags;
  34.     RFLAG1.Flags=NULL;
  35.     RFLAG2.Flags=NULL;
  36.     if(Wflags & POINTREL) RFLAG1.Flags=SELECTED;
  37.     if(Wflags & NOISYREQ) RFLAG2.Flags=SELECTED;
  38.     REQWindow.Screen=WMsc;
  39.     if(!(Wwin=(struct Window *)OpenWindow(&REQWindow))) return(1);
  40.     Wrp=Wwin->RPort;
  41.     WinBorder(Wwin);
  42.  
  43.     do
  44.     {
  45.         GetMessage(Wwin);
  46.         if(class==GADGETUP)
  47.         {
  48.             switch(Id)
  49.             {
  50.                 /* SORRY */
  51.         case 0: quit=0;
  52.             break;
  53.                 /* OK */
  54.         case 1: strcpy(awin->Title,TITLEBuff);
  55.             awin->LeftEdge=Wleft;
  56.             awin->TopEdge=Wtop;
  57.             awin->Width=awin->win->Width;
  58.             awin->Height=awin->win->Height;
  59.             areq->RelTop=Wmaxheight;
  60.             areq->RelLeft=Wminheight;
  61.             awin->BlockPen=Wblock;
  62.             awin->DetailPen=Wdetail;
  63.             areq->BackFill=back;
  64.             areq->PFlags=Wflags;
  65.             Mwidth=Wwidth;
  66.             Mheight=Wheight;
  67.             quit=2;
  68.             break;
  69.                 /* CLOSE */
  70.         case 2: if(Error(32,0,0)==0) break;
  71.             DelWin();
  72.             quit=0;
  73.             break;
  74.                 /* ReqName */
  75.         case 3: break;
  76.                 /* BackFill */
  77.         case 4: back=BACKInfo.LongInt;
  78.             break;
  79.                 /* RelLeft */
  80.         case 5: Wminheight=MINWInfo.LongInt;
  81.             break;
  82.                 /* RelTop */
  83.         case 6: Wmaxheight=MINHInfo.LongInt;
  84.             break;
  85.                 /* LeftEdge */
  86.         case 7: Wleft=LEFTInfo.LongInt;
  87.             break;
  88.                 /* TopEdge */
  89.         case 8: Wtop=TOPInfo.LongInt;
  90.             break;
  91.                 /* Width */
  92.         case 9: Wwidth=WIDTHInfo.LongInt;
  93.             break;
  94.                 /* Height */
  95.         case 10: Wheight=HEIGHTInfo.LongInt;
  96.             break;
  97.         case 11: Wflags ^= POINTREL;
  98.             break;
  99.         case 12: Wflags ^= NOISYREQ;
  100.             break;
  101.                 /* DetailPen */
  102.         case 13: Wdetail=DETAILInfo.LongInt;
  103.             break;
  104.                 /* BlockPen */
  105.         case 14: Wblock=BLOCKInfo.LongInt;
  106.             break;
  107.         } /* switch Id */
  108.     } /* if class */
  109.     } while(quit==1); /* do */
  110.     CloseWindow(Wwin);
  111.     Work();
  112.     if(quit)
  113.     {
  114.         SaveOk=1;
  115.         SetNewWin(2);
  116.     }
  117.     Ready();
  118.     ScreenToFront(sc);
  119.     return(0);
  120. }
  121.  
  122. USHORT DefAlert()
  123. {
  124.     USHORT quit=1;
  125.     ScreenToFront(WMsc);
  126.     Wflags=areq->PFlags;
  127.     Wheight=awin->Height;
  128.     sprintf(HEIGHTBuff,"%d",Wheight);
  129.     strcpy(TITLEBuff,awin->Title);
  130.     AlertWindow.Screen=WMsc;
  131.     if(!(Wwin=(struct Window *)OpenWindow(&AlertWindow))) return(1);
  132.     Wrp=Wwin->RPort;
  133.     WinBorder(Wwin);
  134.     SetAlert();
  135.     do
  136.     {
  137.         GetMessage(Wwin);
  138.         if(class==GADGETUP)
  139.         {
  140.             switch(Id)
  141.             {
  142.                 /* SORRY */
  143.         case 0: quit=0;
  144.             break;
  145.                 /* OK */
  146.         case 1: strcpy(awin->Title,TITLEBuff);
  147.             awin->Height=awin->win->Height;
  148.             areq->PFlags=Wflags;
  149.             Mwidth=640;
  150.             Mheight=Wheight;
  151.             quit=2;
  152.             break;
  153.                 /* CLOSE */
  154.         case 2: if(Error(34,0,0)==0) break;
  155.             DelWin();
  156.             quit=0;
  157.             break;
  158.                 /* AlertName */
  159.         case 3: break;
  160.                 /* Height */
  161.         case 4: Wheight=HEIGHTInfo.LongInt;
  162.             break;
  163.             } /* switch Id */
  164.         } /* if class */
  165.         if(class==GADGETDOWN)
  166.         {
  167.             switch(Id)
  168.             {
  169.                 case 5: Wflags = 0;
  170.                     SetAlert();
  171.                     break;
  172.                 case 6: Wflags = 1;
  173.                     SetAlert();
  174.                     break;
  175.             }
  176.         }
  177.     } while(quit==1); /* do */
  178.     CloseWindow(Wwin);
  179.     Work();
  180.     if(quit)
  181.     {
  182.         SaveOk=1;
  183.         SetNewWin(2);
  184.     }
  185.     Ready();
  186.     ScreenToFront(sc);
  187.     return(0);
  188. }
  189.  
  190. VOID SetAlert()
  191. {
  192.     y=16;
  193.     if(Wflags & 1) y=28;
  194.     Box(16,36,y,16,128,&AFLAG2);
  195. }
  196.  
  197. VOID DelWin()
  198. {
  199.     if(awin->Parent)
  200.     {
  201.         awin->Parent->NextWindow=awin->NextWindow;
  202.         if(awin->NextWindow)
  203.         {
  204.             helpW=awin->NextWindow;
  205.             awin->NextWindow->Parent=awin->Parent;
  206.         }
  207.         else
  208.         {
  209.             helpW=awin->Parent;
  210.             lastW=helpW;
  211.         }
  212.     }
  213.     else
  214.     {
  215.         if(awin->NextWindow)
  216.         {
  217.             if(awin==noscW)
  218.                 noscW=awin->NextWindow;
  219.             firstW=awin->NextWindow;
  220.             firstW->Parent=NULL;
  221.             helpW=firstW;
  222.             if(asc) asc->FirstWindow=firstW;
  223.         }
  224.         else
  225.         {
  226.             lastW=NULL;
  227.             helpW=NULL;
  228.             firstW=NULL;
  229.             if(awin==noscW) noscW=NULL;
  230.             else asc->FirstWindow=NULL;
  231.             MenuOff();
  232.         }
  233.     }
  234.     CloseWin(awin);
  235.     awin=helpW;
  236.     if(awin) SetNewWin(0);
  237. }
  238.  
  239. USHORT NegGad()
  240. {
  241.     gleft=-91;
  242.     if(NegBor("Cancel")) return(1);
  243.     agad->Flags |= GRELRIGHT;
  244.     gleft=18;
  245.     if(NegBor("Retry")) return(1);
  246.     helpG=firstG;
  247.     MakeGadget();
  248.     helpG=lastG;
  249.     MakeGadget();
  250.     return(0);
  251. }
  252.  
  253. USHORT NegBor(UBYTE *s)
  254. {
  255.     gtop=-20;
  256.     gwidth=(strlen(s)*8)+12;
  257.     gheight=14;
  258.     if(NewGad()) return(1);
  259.     agad->Flags |= GRELBOTTOM;
  260.     agad->Activation |= TOGGLESELECT;
  261.     agad->PFlags=1;
  262.     if(NewBorder()) return(1);
  263.     abor->Count=9;
  264.     abor->Vectors[14]=abor->Width-1;
  265.     abor->Vectors[16]=abor->Width-1;
  266.     abor->Vectors[12]=1;
  267.     abor->Vectors[10]=1;
  268.     abor->Vectors[13]=15;
  269.     abor->Vectors[15]=15;
  270.     if(NewBorder()) return(1);
  271.     abor->LeftEdge=1;
  272.     abor->TopEdge=1;
  273.     abor->Width-=4;
  274.     abor->Height-=4;
  275.     abor->FrontPen=0;
  276.     abor->Count=9;
  277.     abor->Vectors[2]=abor->Width;
  278.     abor->Vectors[4]=abor->Width;
  279.     abor->Vectors[14]=abor->Width-1;
  280.     abor->Vectors[16]=abor->Width-1;
  281.     abor->Vectors[12]=1;
  282.     abor->Vectors[10]=1;
  283.     abor->Vectors[13]=11;
  284.     abor->Vectors[15]=11;
  285.     abor->Vectors[5]=11;
  286.     abor->Vectors[7]=11;
  287.     left=6;
  288.     top=3;
  289.     dm=JAM1;
  290.     front=0;
  291.     back=1;
  292.     f1=0;
  293.     strcpy(TITLEBuff,s);
  294.     style=0;
  295.     firstT=NULL;
  296.     lastT=NULL;
  297.     if(NewText()) return(1);
  298.     SetT(1);
  299.     return(0);
  300. }
  301.  
  302. USHORT DefAutoReq()
  303. {
  304.     USHORT quit=1;
  305.     ScreenToFront(WMsc);
  306.     Wwidth=awin->Width;
  307.     sprintf(WIDTHBuff,"%d",Wwidth);
  308.     Wheight=awin->Height;
  309.     sprintf(HEIGHTBuff,"%d",Wheight);
  310.     GNAMEInfo.DispPos=0;
  311.     strcpy(GNAMEBuff,awin->FirstGadget->Name); /* ReqName */
  312.     Wflags=areq->PFlags;
  313.     Widcmp=areq->NFlags;
  314.     for(i=0; i<9; i++)
  315.     {
  316.         NFLAGS[i].Flags=NULL;
  317.         PFLAGS[i].Flags=NULL;
  318.         if(Wflags & WIDCMP[PFLAGS[i].GadgetID-10])
  319.             PFLAGS[i].Flags=SELECTED;
  320.         if(Widcmp & WIDCMP[NFLAGS[i].GadgetID-40])
  321.             NFLAGS[i].Flags=SELECTED;
  322.     }
  323.     AREQWindow.Screen=WMsc;
  324.     if(!(Wwin=(struct Window *)OpenWindow(&AREQWindow))) return(1);
  325.     Wrp=Wwin->RPort;
  326.     WinBorder(Wwin);
  327.  
  328.     do
  329.     {
  330.         GetMessage(Wwin);
  331.         if(class==GADGETUP)
  332.         {
  333.             switch(Id)
  334.             {
  335.                 /* SORRY */
  336.         case 0: quit=0;
  337.             break;
  338.                 /* OK */
  339.         case 1: strcpy(awin->FirstGadget->Name,GNAMEBuff);
  340.             awin->Width=awin->win->Width;
  341.             awin->Height=awin->win->Height;
  342.             areq->PFlags=Wflags;
  343.             areq->NFlags=Widcmp;
  344.             Mwidth=Wwidth;
  345.             Mheight=Wheight;
  346.             quit=2;
  347.             break;
  348.                 /* CLOSE */
  349.         case 2: if(Error(33,0,0)==0) break;
  350.             DelWin();
  351.             quit=0;
  352.             break;
  353.                 /* ReqName */
  354.         case 3: break;
  355.                 /* Width */
  356.         case 4: Wwidth=WIDTHInfo.LongInt;
  357.             break;
  358.                 /* Height */
  359.         case 5: Wheight=HEIGHTInfo.LongInt;
  360.             break;
  361.         } /* switch Id */
  362.     } /* if class */
  363.     if(class==GADGETDOWN)
  364.     {
  365.         if(Id > 9 && Id < 40)
  366.             Wflags ^= WIDCMP[Id-10];
  367.         if(Id > 39 && Id < 70)
  368.             Widcmp ^= WIDCMP[Id-40];
  369.     }
  370.     } while(quit==1); /* do */
  371.     CloseWindow(Wwin);
  372.     Work();
  373.     if(quit)
  374.     {
  375.         SaveOk=1;
  376.         SetNewWin(2);
  377.     }
  378.     Ready();
  379.     ScreenToFront(sc);
  380.     return(0);
  381. }
  382.  
  383.